package com.aiwiown.snackmq.storage.config;

import lombok.Data;

import java.io.File;

@Data
public class StorageConfig {
    /**
     * 存储根目录
     */
    private String baseDir = "data";
    
    /**
     * 单个文件最大大小（字节）
     */
    private long maxFileSize = 1024 * 1024 * 1024; // 1GB
    
    /**
     * 内存映射文件大小（字节）
     */
    private long mappedFileSize = 64 * 1024 * 1024; // 64MB
    
    /**
     * 刷盘间隔（毫秒）
     */
    private long flushInterval = 1000;
    
    /**
     * 是否启用异步刷盘
     */
    private boolean asyncFlush = true;
    
    /**
     * 是否预热文件
     */
    private boolean warmup = true;
    
    /**
     * 是否保留文件
     */
    private boolean retainFiles = true;
    
    /**
     * 是否启用压缩
     */
    private boolean enableCompression = false;
    
    /**
     * 是否启用CRC校验
     */
    private boolean enableCrc = true;
    
    /**
     * 是否启用文件锁
     */
    private boolean enableFileLock = true;

    /**
     * 设置基础目录
     */
    public void setBaseDir(String baseDir) {
        if (baseDir == null || baseDir.trim().isEmpty()) {
            throw new IllegalArgumentException("Base directory cannot be null or empty");
        }
        // 确保使用绝对路径
        File dir = new File(baseDir);
        this.baseDir = dir.getAbsolutePath();
    }

    /**
     * 获取消息存储目录
     */
    public String getMessageStorePath() {
        return new File(baseDir, "messages").getAbsolutePath();
    }

    /**
     * 获取索引存储目录
     */
    public String getIndexStorePath() {
        return new File(baseDir, "index").getAbsolutePath();
    }
} 